/*
 【入门】汉诺塔的移动次数 (用递归的方法解题)
  题目描述

              │               │              │
              │               │              │
            ┌─┼─┐             │              │
           ┌┴─┼─┴┐            │              │
          ┌┴──┼──┴┐           │              │
        ──┴───┴───┴───────────┴──────────────┴─────
              A               B              C

    汉诺塔的问题大家都已经很熟悉了，有三个柱子，每个柱子上有一些大小不一的盘子，
    要把盘子从 A 柱移动到 C 柱，可以借助 B 柱; 小盘子只能落在大盘子上!
    请问 n 个盘子的情况下，需要最少移动多少次？
  输入
    输入一个整数 n 代表盘子的数量（n <= 20）
  输出
    一个整数，代表 n 个盘子的移动次数
  样例输入
    3
  样例输出
    7
*/

#include <bits/stdc++.h>

using namespace std;

/*
  如下为使用递归的方法对应的代码实现:
  补充说明: 使用数学的方法解答在如下文件中:
      joyskid/J/L3/12_recursive_algorithm/p1223_hanoi_tower_2.cpp
*/
int f(int n) {
    if (n == 1) {
        return 1;
    } else {
        /*
          从 A 柱移动 n 个盘子到 C 柱需要的最少移动次数 f(n) 可以抽象地分解成如下 3 步:
            1). 将 n - 1 个盘子从 A 柱移动到 B 柱，需要的最少移动次数为 f(n - 1);
            2). 将 最后一个盘子从 A 柱移动到 C 柱，需要移动 1 次;
            3). 将 n - 1 个盘子从 B 柱移动到 C 柱，需要的最少移动次数为 f(n - 1);
          所以可以得到如下关系式:
            f(n) = 2 * f(n - 1) + 1
        */
        return 2 * f(n - 1) + 1;
    }
}

int main() {
    int n;

    cin >> n;
    cout << f(n);

    return 0;
}